Remember The Milkの未完了のタスクをThingsにインポートする
手順通りにやればみんなできるけど、ソフトをいくつかつかっているところで躓くかも
アイデア
RTMからのImportには対応していないが、plain textからのImportができる。これをつかう
リストやタグをimportすることはできないので諦める
手順
RTMからログをexportする(JSON)
必要な項目を抜き出す
AppleScriptで読み込めるようにするために、最終的にタイトル ノート URLという文字列を作りたい
ImportingするAppScriptは2つめのtab以降は無視されるようになっているのでノートとURLは空白で結合する
文字列作成にはjqとtrdsqlをつかうのでインストールする code:install.zsh
# jqの導入
brew install jq
# trdsqlの導入
go get -d github.com/noborus/trdsql
cd $GOPATH/src/github.com/noborus/trdsql
make
make install
RTMのexport fileから未完了なタスクのみを抽出する
code:tsvの抽出.zsh
jq -r '.tasks[] |select(.date_completed == null)| .name, .url, .series_id | @tsv' ./rememberthemilk_export_2020-02-16T15_09_38.907Z.json > task.tsv RTMのexport fileからノートを抽出する
code:noteの抽出.zsh
jq -r '.notes[] | .content, .series_id| @tsv' ./rememberthemilk_export_2020-02-16T15_09_38.907Z.json > note.tsv タスクとノートを結合してTSVで書き出す
code:最終出力.zsh
trdsql -id "\t" -od "\t" "SELECT t.c1, t.c2, n.c1 FROM task.tsv as t LEFT JOIN note.tsv as n ON (t.c3 = n.c2)" > taskWithNote.tsv
ここまでで未完了なタスクについてtitle url noteのファイルを得ることができた
あとはurlとnoteを空文字で結合するだけ。ただし、RTMでURLやnoteが存在しない場合に、Thingsに読み込ませたときに空文字のノートを作成しないようにtitleだけ出力する。結局次のように処理すれば良い。
code:フォーマット調整.zsh
awk -F "\t" '{ if($2 != "" || $3 != "") {print $1, $2" "$3} else {print $1} }' OFS="\t" taskWithNote.tsv > taskWithNoteConcatneted.tsv
taskWithNoteConcatneted.tsvをThingsが提供しているAppleScriptで読み込ませれば終了
実行中にThingsのアプリケーションに触ると固まるので注意。終わるまでまってね
さわるとerror "Things3でエラーが起きました: AppleEventがタイムアウトしました。" number -1712とかいわれちゃいます(わたしはさわりました)
/icons/hr.icon
以下、自分用の作業メモ
タイトルとURL
tasksにあるので
code:zsh
jq '.tasks[] | {message: .name, url: .url}' ./rememberthemilk_export_2020-02-16T15_09_38.907Z.json
のようにすると取得できる
TSVで取得したいなら、arrayで渡して最後に@tsvをつければいい
code:tsv
完了したものはとりのぞきたい。date_completedがついているタスクを無視しよう
code:tsv
jq '.tasks[] |select(.date_completed == null)| .name, .url' ./rememberthemilk_export_2020-02-16T15_09_38.907Z.json ここまでで、最低限未完了のタスクをplain textでImportする準備ができたので抽出する
code:tsv
jq -r '.tasks[] |select(.date_completed == null)| .name, .url, .series_id | @tsv' ./rememberthemilk_export_2020-02-16T15_09_38.907Z.json > task.tsv ノート
RTMのノートは複数人で書くことが前提で、編集が面倒なのであまり使っていなかった
JSONを見ると、noteはtaskと同一階層に存在する。series_idが同じものがそのノートになるようになっている。そこで結合する必要がある
code:noteの抽出
jq -r '.notes[] | .content, .series_id| @tsv' ./rememberthemilk_export_2020-02-16T15_09_38.907Z.json > note.tsv タスクとノートを結合する
code:件数の確認
wc -l task.tsv
353 task.tsv
code:結合
trdsql -id "\t" "SELECT t.c1, t.c2, n.c1, t.c3 FROM task.tsv as t JOIN note.tsv as n ON (t.c3 = n.c2)"
TSVで出力する
code:最終出力
trdsql -id "\t" -od "\t" "SELECT t.c1, t.c2, n.c1 FROM task.tsv as t LEFT JOIN note.tsv as n ON (t.c3 = n.c2)" > taskWithNote.tsv
ここまでで未完了なタスクtitle url noteのファイルを得ることができる
ImportingするAppScriptは2つめのtab以降は無視されるようになっているので、urlとnoteを結合する
code:結合
awk -F "\t" '{print $1, $2" "$3}' OFS="\t" taskWithNote.tsv > taskWithNoteConcatneted.tsv
これだと何もノートがないタスクにも というノートが付いてしまうので
code::なし版
awk -F "\t" '{ if($2 != "" || $3 != "") {print $1, $2" "$3} else {print $1} }' OFS="\t" taskWithNote.tsv > taskWithNoteConcatneted.tsv
wc -l taskWithNoteConcatneted.tsv
354 taskWithNoteConcatneted.tsv # なぜか1件増えてるけど無視